/**
 * module：下载模块
 */
const FILE_FORMAT = {
    abw: 'application/x-abiword',
    arc: 'application/x-freearc',
    avi: 'video/x-msvideo',
    azw: 'application/vnd.amazon.ebook',
    bin: 'application/octet-stream',
    bmp: 'image/bmp',
    bz: 'application/x-bzip',
    bz2: 'application/x-bzip2',
    csh: 'application/x-csh',
    css: 'text/css',
    csv: 'text/csv',
    doc: 'application/msword',
    docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
    eot: 'application/vnd.ms-fontobject',
    epub: 'application/epub+zip',
    gif: 'image/gif',
    htm: 'text/html',
    html: 'text/html',
    ico: 'image/vnd.microsoft.icon',
    ics: 'text/calendar',
    jar: 'application/java-archive',
    jpeg: 'image/jpeg',
    jpg: 'image/jpeg',
    js: 'text/javascript',
    json: 'application/json',
    mid: 'audio/midi audio/x-midi',
    midi: 'audio/midi audio/x-midi',
    mjs: 'text/javascript',
    mp3: 'audio/mpeg',
    mpeg: 'video/mpeg',
    odp: 'application/vnd.oasis.opendocument.presentation',
    ods: 'application/vnd.oasis.opendocument.spreadsheet',
    odt: 'application/vnd.oasis.opendocument.text',
    oga: 'audio/ogg',
    ogv: 'video/ogg',
    ogx: 'application/ogg',
    otf: 'font/otf',
    png: 'image/png',
    pdf: 'application/pdf',
    ppt: 'application/vnd.ms-powerpoint',
    pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
    rar: 'application/x-rar-compressed',
    rtf: 'application/rtf',
    sh: 'application/x-sh',
    svg: 'image/svg+xml',
    swf: 'application/x-shockwave-flash',
    tar: 'application/x-tar',
    tif: 'image/tiff',
    tiff: 'image/tiff',
    ttf: 'font/ttf',
    txt: 'text/plain',
    vsd: 'application/vnd.visio',
    wav: 'audio/wav',
    weba: 'audio/webm',
    webm: 'video/webm',
    webp: 'image/webp',
    woff: 'font/woff',
    woff2: 'font/woff2',
    xhtml: 'application/xhtml+xml',
    xls: 'application/vnd.ms-excel',
    xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    xml: 'application/xml', //对普通用户不可读，想可读修改为 text/xml
    xul: 'application/vnd.mozilla.xul+xml',
    zip: 'application/zip',
    '3gp': 'video/3gpp', //含视屏，若不含视屏，改为 audio/3gpp
    '3g2': 'video/3gpp2', //含视屏，若不含视屏，改为 audio/3gpp2
    '7z': 'application/x-7z-compressed'
};
/**
 * @class 下载文件
 * @description 将服务器返回的 blob 文档流下载为文件
 * @param {String} blob -  文档流
 * @param {String} format -  文件格式，默认 docx
 * @param {String} fileName -  文件名，默认 download
 * @return {null} 无
 * @author juZiBuTian 2024/1/4
 * @version 1.0.0
 * @example
 *   new class(blob, format, fileName)
 */
class DownloadBlob {
    blob: Blob;
    format: string;
    fileName: string;
    constructor(blob: BlobPart, format: string, fileName: string) {
        this.blob = new Blob([blob], { type: (FILE_FORMAT as any)[format] });
        this.format = format || 'docx';
        this.fileName = fileName || 'download';
        this.init();
    }
    private init() {
        const url = window.URL.createObjectURL(this.blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = this.fileName + '.' + this.format;
        a.style.display = 'none';
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
        window.URL.revokeObjectURL(url);
    }
}
export default DownloadBlob;
